package club.hicode.daydayup.filelock;

import cn.hutool.core.io.FileUtil;
import cn.hutool.core.thread.ThreadUtil;
import org.junit.Test;

import java.io.*;
import java.nio.channels.FileChannel;
import java.nio.channels.FileLock;
import java.util.concurrent.TimeUnit;

/**
 * 文件加锁，防止第三方操作的测试
 *
 * @author Liu Chunfu
 * @date 2018-04-13 下午2:33
 **/
public class FileChanel {

    @Test
    public void testLockFile1() throws FileNotFoundException {

        File file = new File("/Users/liuchunfu/Develop/temp/1.txt");

        FileOutputStream fis = new FileOutputStream(file);
        FileChannel channel = fis.getChannel();
        try (FileLock fileLock = channel.tryLock()) {
            //new Thread(()-> FileUtil.copy(file,new File("/Users/liuchunfu/Develop/temp/2.txt"),true)).start();
            ThreadUtil.sleep(10, TimeUnit.SECONDS);
        } catch (IOException e) {
            e.printStackTrace();
        }
        //结论，此方式确实可以对文件加锁，但是文件加锁后，其他程序无法操作，如果强行操作容易将文件内容洗白，不建议如此。
        System.out.println("OVER");
    }
}

